str_trim PROC
        PUSH     {r4,lr}
; R0=s
        MOV      r4,r0
; R4=s
        BL       strlen       ; strlen() берет значение "s" из R0
; R0=str_len
        MOV      r3,#0
; R3 всегда будет содержать 0
|L0.16|
        CMP      r0,#0        ; str_len==0?
        ADDNE    r2,r4,r0     ; (§если§ str_len!=0) R2=R4+R0=s+str_len
        LDRBNE   r1,[r2,#-1]  ; (§если§ str_len!=0) R1=§загрузить§ байт по адресу R2-1=s+str_len-1
        CMPNE    r1,#0        ; (§если§ str_len!=0) сравнить загруженный байт с 0
        BEQ      |L0.56|      ; перейти на выход, если str_len==0 или если загруженный байт - это 0
        CMP      r1,#0xd      ; загруженный байт - это '\r'?
        CMPNE    r1,#0xa      ; (§если§ §загруженный§ §байт§ - §это§ §не§ '\r') загруженный байт - это '\r'?
        SUBEQ    r0,r0,#1     ; (§если§ §загруженный§ §байт§ - §это§ '\r' или '\n') R0-- или str_len--
        STRBEQ   r3,[r2,#-1]  ; (§если§ §загруженный§ §байт§ - §это§ '\r' или '\n') записать R3 (ноль) по адресу R2-1=s+str_len-1
        BEQ      |L0.16|      ; перейти на начало цикла, если загруженный байт был '\r' или '\n'
|L0.56|
; возврат "s"
        MOV      r0,r4
        POP      {r4,pc}
        ENDP
